dplyrパッケージを用いれば、レコード数や変数の多いデータの処理が高速に行える。
特に、変数が増えても処理速度は変わらない。
MASS
パッケージのbirthwt
を用いる
data(birthwt,package="MASS")
head(d <- birthwt)
## low age lwt race smoke ptl ht ui ftv bwt
## 85 0 19 182 2 0 0 0 1 0 2523
## 86 0 33 155 3 0 0 0 0 3 2551
## 87 0 20 105 1 1 0 0 0 1 2557
## 88 0 21 108 1 1 0 0 1 2 2594
## 89 0 18 107 1 1 0 0 1 0 2600
## 91 0 21 124 3 0 0 0 0 0 2622
AND
は,
で繋げるOR
は|
で繋げるlibrary(dplyr)
filter(d,smoke==1,age<=20,bwt<=2000)
## low age lwt race smoke ptl ht ui ftv bwt
## 1 1 19 91 1 1 2 0 1 0 1885
## 2 1 20 150 1 1 0 0 0 2 1928
filter(d,smoke==1,age<=20,bwt<=2000|bwt>=4000)
## low age lwt race smoke ptl ht ui ftv bwt
## 1 0 19 120 1 1 0 0 0 0 4238
## 2 1 19 91 1 1 2 0 1 0 1885
## 3 1 20 150 1 1 0 0 0 2 1928
AND
は,
で繋げる-
をつける:
で表せるhead(select(d,low,age,lwt))
## low age lwt
## 85 0 19 182
## 86 0 33 155
## 87 0 20 105
## 88 0 21 108
## 89 0 18 107
## 91 0 21 124
head(select(d,low:lwt))
## low age lwt
## 85 0 19 182
## 86 0 33 155
## 87 0 20 105
## 88 0 21 108
## 89 0 18 107
## 91 0 21 124
head(select(d,-(low:lwt)))
## race smoke ptl ht ui ftv bwt
## 85 2 0 0 0 1 0 2523
## 86 3 0 0 0 0 3 2551
## 87 1 1 0 0 0 1 2557
## 88 1 1 0 0 1 2 2594
## 89 1 1 0 0 1 0 2600
## 91 3 0 0 0 0 0 2622
head(
mutate(d,bwt.kg=bwt/1000,
bwt.kg.cat=cut(bwt.kg,breaks=c(0,2.5,5)))
)
## low age lwt race smoke ptl ht ui ftv bwt bwt.kg bwt.kg.cat
## 1 0 19 182 2 0 0 0 1 0 2523 2.523 (2.5,5]
## 2 0 33 155 3 0 0 0 0 3 2551 2.551 (2.5,5]
## 3 0 20 105 1 1 0 0 0 1 2557 2.557 (2.5,5]
## 4 0 21 108 1 1 0 0 1 2 2594 2.594 (2.5,5]
## 5 0 18 107 1 1 0 0 1 0 2600 2.600 (2.5,5]
## 6 0 21 124 3 0 0 0 0 0 2622 2.622 (2.5,5]
,
で繋げるdesc(...)
で降順head(
arrange(d,age,desc(bwt))
)
## low age lwt race smoke ptl ht ui ftv bwt
## 1 0 14 135 1 0 0 0 0 0 3941
## 2 1 14 100 3 0 0 0 0 2 2495
## 3 1 14 101 3 1 1 0 0 0 2466
## 4 0 15 98 2 0 0 0 0 0 2778
## 5 1 15 115 3 0 0 0 1 0 2381
## 6 1 15 110 1 0 0 0 0 0 2353
,
で繋げるn()
でカウントsummarize(d,n=n(),m.bwt=mean(bwt),s.bwt=sd(bwt))
## n m.bwt s.bwt
## 1 189 2944.587 729.2143
sumamrize
と組合せてグループ別に要約grouped.d <- group_by(d,smoke,race)
summarize(grouped.d,n=n(),m.bwt=mean(bwt),s.bwt=sd(bwt))
## Source: local data frame [6 x 5]
## Groups: smoke
##
## smoke race n m.bwt s.bwt
## 1 0 1 44 3428.750 710.0989
## 2 0 2 16 2854.500 621.2543
## 3 0 3 55 2815.782 709.3493
## 4 1 1 52 2826.846 626.4725
## 5 1 2 10 2504.000 637.0568
## 6 1 3 12 2757.167 810.0446